home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 050 / bix04.arc / SHOWHEX.PAS < prev    next >
Pascal/Delphi Source File  |  1986-11-01  |  2KB  |  62 lines

  1. {TITLE: LOOKING AT VARIABLES IN HEX
  2.     You don't need to do it very often.  When you do, nothing else will do.  
  3. Here's a handy-dandy little tool for peering into your TP program while 
  4. it's running.}
  5.  
  6. (***************************************************************************)
  7. PROCEDURE HexDump (Target:BytePtr; Length:INTEGER);
  8.  
  9. {This procedure will dump, in hex, an area of memory <Length> long beginning
  10.  at <Target>.  You must previously have defined "BytePtr" as a pointer to an
  11.  array of BYTE.  The following will do it:
  12.             TYPE
  13.               Bytes =    ARRAY[0..1] OF BYTE;
  14.               BytePtr =  ^Bytes;
  15.  
  16.  Call HexDump with the *ADDRESS* where the dump is to begin, and a length.
  17.  For example, to dump the contents of integer variable IntVar, do this:
  18.           HexDump(addr(IntVar),2);
  19.  Of course, you could have used a length greater than 2 if you wanted to dump
  20.  a larger area of memory.
  21.  
  22.  Constant "Width" is the number of columns of display to use.  48 gets you 16
  23.  bytes of dump before a new line.  You can change it to anything that suits.
  24.  
  25.  All the dire warnings about none of this being guaranteed apply.
  26.  
  27.                                             --Bob Brown
  28.                                               September, 1986
  29. }
  30.  
  31. CONST
  32.   Width =      48;
  33.   Hexes:       ARRAY[0..15] OF CHAR = '0123456789ABCDEF';
  34. VAR
  35.   I:           INTEGER;
  36.   LineSize:    INTEGER;
  37.   Left:        BYTE;
  38.   Right:       BYTE;
  39.   LeftC:       CHAR;
  40.   RightC:      CHAR;
  41.  
  42. BEGIN {HexDump}
  43.   WRITELN('');
  44.   LineSize := 0;
  45.   FOR I := 0 to Length-1 DO
  46.     BEGIN
  47.       Right := Target^[I] AND $0F;
  48.       Left := Target^[I] SHR 4;
  49.       LeftC := Hexes[Left];
  50.       RightC := Hexes[Right];
  51.       WRITE(LeftC,RightC,' ');
  52.       LineSize := LineSize + 3;
  53.       IF LineSize >= Width THEN
  54.         BEGIN
  55.           WRITELN('');
  56.           LineSize := 0;
  57.         END;
  58.     END; {For}
  59.     WRITELN('');
  60. END; {HexDump}
  61. (*********************************************************************)
  62.